<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/apic.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/apic.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfQVBJQ19IXzA_"><span class="b">_ASM_X86_APIC_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfQVBJQ19IXzA_"><span class="b">_ASM_X86_APIC_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">cpumask</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">pm</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="True">       6:</span> 
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><a href="cpu.c_macros_ref.html#_YWx0ZXJuYXRpdmVfMA__"><span class="b">alternative</span></a><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="True">       8:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">cpufeature</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="9" /><span class="True">       9:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">processor</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="10" /><span class="True">      10:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">apicdef</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="11" /><span class="True">      11:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">atomic</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="12" /><span class="True">      12:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">fixmap</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="13" /><span class="True">      13:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">mpspec</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="14" /><span class="True">      14:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">msr</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="15" /><span class="True">      15:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">idle</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="16" /><span class="True">      16:</span> 
<a name="17" /><span class="True">      17:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_QVJDSF9BUElDVElNRVJfU1RPUFNfT05fQzNfMA__"><span class="b">ARCH_APICTIMER_STOPS_ON_C3</span></a>    <span class="c">1</span>
<a name="18" /><span class="True">      18:</span> 
<a name="19" /><span class="True">      19:</span> <span class="k">/*</span>
<a name="20" /><span class="True">      20:</span> <span class="k"> * Debugging macros</span>
<a name="21" /><span class="True">      21:</span> <span class="k"> */</span>
<a name="22" /><span class="True">      22:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_QVBJQ19RVUlFVF8w"><span class="b">APIC_QUIET</span></a>   <span class="c">0</span>
<a name="23" /><span class="True">      23:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_QVBJQ19WRVJCT1NFXzA_"><span class="b">APIC_VERBOSE</span></a> <span class="c">1</span>
<a name="24" /><span class="True">      24:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_QVBJQ19ERUJVR18w"><span class="b">APIC_DEBUG</span></a>   <span class="c">2</span>
<a name="25" /><span class="True">      25:</span> 
<a name="26" /><span class="True">      26:</span> <span class="k">/*</span>
<a name="27" /><span class="True">      27:</span> <span class="k"> * Define the default level of output to be very little</span>
<a name="28" /><span class="True">      28:</span> <span class="k"> * This can be turned up by using apic=verbose for more</span>
<a name="29" /><span class="True">      29:</span> <span class="k"> * information and apic=debug for _lots_ of information.</span>
<a name="30" /><span class="True">      30:</span> <span class="k"> * apic_verbosity is defined in apic.c</span>
<a name="31" /><span class="True">      31:</span> <span class="k"> */</span>
<a name="32" /><span class="True">      32:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXBpY19wcmludGtfMA__"><span class="b">apic_printk</span></a><span class="f">(</span><span class="b">v</span><span class="f">,</span> <span class="b">s</span><span class="f">,</span> <span class="b">a</span><span class="f">...</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span>       \
<a name="33" /><span class="True">      33:</span>         <span class="m">if</span> <span class="f">(</span><span class="f">(</span><span class="b">v</span><span class="f">)</span> <span class="f">&lt;=</span> <span class="b">apic_verbosity</span><span class="f">)</span> \
<a name="34" /><span class="True">      34:</span>             <span class="b">printk</span><span class="f">(</span><span class="b">s</span><span class="f">,</span> <span class="f">##</span><span class="b">a</span><span class="f">)</span><span class="f">;</span>    \
<a name="35" /><span class="True">      35:</span>     <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="36" /><span class="True">      36:</span> 
<a name="37" /><span class="True">      37:</span> 
<a name="38" /><span class="False">      38:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9MT0NBTF9BUElDXzA_"><span class="b">CONFIG_X86_LOCAL_APIC</span></a><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_X86_32</span><span class="f">)</span>
<a name="39" /><span class="False">      39:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">generic_apic_probe</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> <span class="f">#</span><span class="n">else</span>
<a name="41" /><span class="True">      41:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">generic_apic_probe</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="42" /><span class="True">      42:</span> <span class="f">{</span>
<a name="43" /><span class="True">      43:</span> <span class="f">}</span>
<a name="44" /><span class="True">      44:</span> <span class="f">#</span><span class="n">endif</span>
<a name="45" /><span class="True">      45:</span> 
<a name="46" /><span class="True">      46:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9MT0NBTF9BUElDXzA_"><span class="b">CONFIG_X86_LOCAL_APIC</span></a>
<a name="47" /><span class="True">      47:</span> 
<a name="48" /><span class="True">      48:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">apic_verbosity</span><span class="f">;</span>
<a name="49" /><span class="True">      49:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">local_apic_timer_c2_ok</span><span class="f">;</span>
<a name="50" /><span class="True">      50:</span> 
<a name="51" /><span class="True">      51:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">disable_apic</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">lapic_timer_frequency</span><span class="f">;</span>
<a name="53" /><span class="True">      53:</span> 
<a name="54" /><span class="True">      54:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="55" /><span class="True">      55:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__inquire_remote_apic</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="56" /><span class="False">      56:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* CONFIG_SMP */</span>
<a name="57" /><span class="False">      57:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__inquire_remote_apic</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">)</span>
<a name="58" /><span class="False">      58:</span> <span class="f">{</span>
<a name="59" /><span class="False">      59:</span> <span class="f">}</span>
<a name="60" /><span class="True">      60:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_SMP */</span>
<a name="61" /><span class="True">      61:</span> 
<a name="62" /><span class="True">      62:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">default_inquire_remote_apic</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">)</span>
<a name="63" /><span class="True">      63:</span> <span class="f">{</span>
<a name="64" /><span class="True">      64:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">apic_verbosity</span> <span class="f">&gt;=</span> <a href="cpu.c_macros_ref.html#_QVBJQ19ERUJVR18w"><span class="b">APIC_DEBUG</span></a><span class="f">)</span>
<a name="65" /><span class="True">      65:</span>         <span class="b">__inquire_remote_apic</span><span class="f">(</span><span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span> <span class="f">}</span>
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="k">/*</span>
<a name="69" /><span class="True">      69:</span> <span class="k"> * With 82489DX we can&apos;t rely on apic feature bit</span>
<a name="70" /><span class="True">      70:</span> <span class="k"> * retrieved via cpuid but still have to deal with</span>
<a name="71" /><span class="True">      71:</span> <span class="k"> * such an apic chip so we assume that SMP configuration</span>
<a name="72" /><span class="True">      72:</span> <span class="k"> * is found from MP table (64bit case uses ACPI mostly</span>
<a name="73" /><span class="True">      73:</span> <span class="k"> * which set smp presence flag as well so we are safe</span>
<a name="74" /><span class="True">      74:</span> <span class="k"> * to use this helper too).</span>
<a name="75" /><span class="True">      75:</span> <span class="k"> */</span>
<a name="76" /><span class="True">      76:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">bool</span> <span class="b">apic_from_smp_config</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="77" /><span class="True">      77:</span> <span class="f">{</span>
<a name="78" /><span class="True">      78:</span>     <span class="m">return</span> <span class="b">smp_found_config</span> <span class="f">&amp;&amp;</span> <span class="f">!</span><span class="b">disable_apic</span><span class="f">;</span>
<a name="79" /><span class="True">      79:</span> <span class="f">}</span>
<a name="80" /><span class="True">      80:</span> 
<a name="81" /><span class="True">      81:</span> <span class="k">/*</span>
<a name="82" /><span class="True">      82:</span> <span class="k"> * Basic functions accessing APICs.</span>
<a name="83" /><span class="True">      83:</span> <span class="k"> */</span>
<a name="84" /><span class="False">      84:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PARAVIRT</span>
<a name="85" /><span class="False">      85:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">paravirt</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="86" /><span class="True">      86:</span> <span class="f">#</span><span class="n">endif</span>
<a name="87" /><span class="True">      87:</span> 
<a name="88" /><span class="True">      88:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="89" /><span class="True">      89:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">is_vsmp_box</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="90" /><span class="False">      90:</span> <span class="f">#</span><span class="n">else</span>
<a name="91" /><span class="False">      91:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">is_vsmp_box</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="92" /><span class="False">      92:</span> <span class="f">{</span>
<a name="93" /><span class="False">      93:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="94" /><span class="False">      94:</span> <span class="f">}</span>
<a name="95" /><span class="True">      95:</span> <span class="f">#</span><span class="n">endif</span>
<a name="96" /><span class="True">      96:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">xapic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="97" /><span class="True">      97:</span> <span class="m">extern</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">safe_xapic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="98" /><span class="True">      98:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">xapic_icr_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a><span class="f">)</span><span class="f">;</span>
<a name="99" /><span class="True">      99:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">setup_profiling_timer</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span><span class="f">)</span><span class="f">;</span>
<a name="100" /><span class="True">     100:</span> 
<a name="101" /><span class="True">     101:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_apic_mem_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">v</span><span class="f">)</span>
<a name="102" /><span class="True">     102:</span> <span class="f">{</span>
<a name="103" /><span class="True">     103:</span>     <span class="m">volatile</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="f">*</span><span class="b">addr</span> <span class="f">=</span> <span class="f">(</span><span class="m">volatile</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="f">*</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19CQVNFXzA_"><span class="b">APIC_BASE</span></a> <span class="f">+</span> <span class="b">reg</span><span class="f">)</span><span class="f">;</span>
<a name="104" /><span class="True">     104:</span> 
<a name="105" /><span class="True">     105:</span>     <a href="cpu.c_macros_ref.html#_YWx0ZXJuYXRpdmVfaW9fMA__"><span class="b">alternative_io</span></a><span class="f">(</span><span class="e">&quot;movl %0, %1&quot;</span><span class="f">,</span> <span class="e">&quot;xchgl %0, %1&quot;</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfMTFBUF8w"><span class="b">X86_FEATURE_11AP</span></a><span class="f">,</span>
<a name="106" /><span class="True">     106:</span>                <a href="cpu.c_macros_ref.html#_QVNNX09VVFBVVDJfMA__"><span class="b">ASM_OUTPUT2</span></a><span class="f">(</span><span class="e">&quot;=r&quot;</span> <span class="f">(</span><span class="b">v</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;=m&quot;</span> <span class="f">(</span><span class="f">*</span><span class="b">addr</span><span class="f">)</span><span class="f">)</span><span class="f">,</span>
<a name="107" /><span class="True">     107:</span>                <a href="cpu.c_macros_ref.html#_QVNNX09VVFBVVDJfMA__"><span class="b">ASM_OUTPUT2</span></a><span class="f">(</span><span class="e">&quot;0&quot;</span> <span class="f">(</span><span class="b">v</span><span class="f">)</span><span class="f">,</span> <span class="e">&quot;m&quot;</span> <span class="f">(</span><span class="f">*</span><span class="b">addr</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="108" /><span class="True">     108:</span> <span class="f">}</span>
<a name="109" /><span class="True">     109:</span> 
<a name="110" /><span class="True">     110:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">native_apic_mem_read</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">)</span>
<a name="111" /><span class="True">     111:</span> <span class="f">{</span>
<a name="112" /><span class="True">     112:</span>     <span class="m">return</span> <span class="f">*</span><span class="f">(</span><span class="f">(</span><span class="m">volatile</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="f">*</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19CQVNFXzA_"><span class="b">APIC_BASE</span></a> <span class="f">+</span> <span class="b">reg</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="113" /><span class="True">     113:</span> <span class="f">}</span>
<a name="114" /><span class="True">     114:</span> 
<a name="115" /><span class="True">     115:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">native_apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="116" /><span class="True">     116:</span> <span class="m">extern</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">native_safe_apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="117" /><span class="True">     117:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">native_apic_icr_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">low</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">id</span><span class="f">)</span><span class="f">;</span>
<a name="118" /><span class="True">     118:</span> <span class="m">extern</span> <span class="b">u64</span> <span class="b">native_apic_icr_read</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="119" /><span class="True">     119:</span> 
<a name="120" /><span class="True">     120:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">x2apic_mode</span><span class="f">;</span>
<a name="121" /><span class="True">     121:</span> 
<a name="122" /><span class="True">     122:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9YMkFQSUNfMA__"><span class="b">CONFIG_X86_X2APIC</span></a>
<a name="123" /><span class="True">     123:</span> <span class="k">/*</span>
<a name="124" /><span class="True">     124:</span> <span class="k"> * Make previous memory operations globally visible before</span>
<a name="125" /><span class="True">     125:</span> <span class="k"> * sending the IPI through x2apic wrmsr. We need a serializing instruction or</span>
<a name="126" /><span class="True">     126:</span> <span class="k"> * mfence for this.</span>
<a name="127" /><span class="True">     127:</span> <span class="k"> */</span>
<a name="128" /><span class="True">     128:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">x2apic_wrmsr_fence</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="129" /><span class="True">     129:</span> <span class="f">{</span>
<a name="130" /><span class="True">     130:</span>     <span class="m">asm</span> <span class="m">volatile</span><span class="f">(</span><span class="e">&quot;mfence&quot;</span> <span class="f">:</span> <span class="f">:</span> <span class="f">:</span> <span class="e">&quot;memory&quot;</span><span class="f">)</span><span class="f">;</span>
<a name="131" /><span class="True">     131:</span> <span class="f">}</span>
<a name="132" /><span class="True">     132:</span> 
<a name="133" /><span class="True">     133:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_apic_msr_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">v</span><span class="f">)</span>
<a name="134" /><span class="True">     134:</span> <span class="f">{</span>
<a name="135" /><span class="True">     135:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">reg</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_QVBJQ19ERlJfMA__"><span class="b">APIC_DFR</span></a> <span class="f">||</span> <span class="b">reg</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_QVBJQ19JRF8w"><span class="b">APIC_ID</span></a> <span class="f">||</span> <span class="b">reg</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_QVBJQ19MRFJfMA__"><span class="b">APIC_LDR</span></a> <span class="f">||</span>
<a name="136" /><span class="True">     136:</span>         <span class="b">reg</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_QVBJQ19MVlJfMA__"><span class="b">APIC_LVR</span></a><span class="f">)</span>
<a name="137" /><span class="True">     137:</span>         <span class="m">return</span><span class="f">;</span>
<a name="138" /><span class="True">     138:</span> 
<a name="139" /><span class="True">     139:</span>     <span class="b">wrmsr</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19CQVNFX01TUl8w"><span class="b">APIC_BASE_MSR</span></a> <span class="f">+</span> <span class="f">(</span><span class="b">reg</span> <span class="f">&gt;&gt;</span> <span class="c">4</span><span class="f">)</span><span class="f">,</span> <span class="b">v</span><span class="f">,</span> <span class="c">0</span><span class="f">)</span><span class="f">;</span>
<a name="140" /><span class="True">     140:</span> <span class="f">}</span>
<a name="141" /><span class="True">     141:</span> 
<a name="142" /><span class="True">     142:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_apic_msr_eoi_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">v</span><span class="f">)</span>
<a name="143" /><span class="True">     143:</span> <span class="f">{</span>
<a name="144" /><span class="True">     144:</span>     <span class="b">wrmsr</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19CQVNFX01TUl8w"><span class="b">APIC_BASE_MSR</span></a> <span class="f">+</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19FT0lfMA__"><span class="b">APIC_EOI</span></a> <span class="f">&gt;&gt;</span> <span class="c">4</span><span class="f">)</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_QVBJQ19FT0lfQUNLXzA_"><span class="b">APIC_EOI_ACK</span></a><span class="f">,</span> <span class="c">0</span><span class="f">)</span><span class="f">;</span>
<a name="145" /><span class="True">     145:</span> <span class="f">}</span>
<a name="146" /><span class="True">     146:</span> 
<a name="147" /><span class="True">     147:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">native_apic_msr_read</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">)</span>
<a name="148" /><span class="True">     148:</span> <span class="f">{</span>
<a name="149" /><span class="True">     149:</span>     <span class="b">u64</span> <span class="b">msr</span><span class="f">;</span>
<a name="150" /><span class="True">     150:</span> 
<a name="151" /><span class="True">     151:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">reg</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_QVBJQ19ERlJfMA__"><span class="b">APIC_DFR</span></a><span class="f">)</span>
<a name="152" /><span class="True">     152:</span>         <span class="m">return</span> <span class="f">-</span><span class="c">1</span><span class="f">;</span>
<a name="153" /><span class="True">     153:</span> 
<a name="154" /><span class="True">     154:</span>     <span class="b">rdmsrl</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19CQVNFX01TUl8w"><span class="b">APIC_BASE_MSR</span></a> <span class="f">+</span> <span class="f">(</span><span class="b">reg</span> <span class="f">&gt;&gt;</span> <span class="c">4</span><span class="f">)</span><span class="f">,</span> <span class="b">msr</span><span class="f">)</span><span class="f">;</span>
<a name="155" /><span class="True">     155:</span>     <span class="m">return</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a><span class="f">)</span><span class="b">msr</span><span class="f">;</span>
<a name="156" /><span class="True">     156:</span> <span class="f">}</span>
<a name="157" /><span class="True">     157:</span> 
<a name="158" /><span class="True">     158:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_x2apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="159" /><span class="True">     159:</span> <span class="f">{</span>
<a name="160" /><span class="True">     160:</span>     <span class="k">/* no need to wait for icr idle in x2apic */</span>
<a name="161" /><span class="True">     161:</span>     <span class="m">return</span><span class="f">;</span>
<a name="162" /><span class="True">     162:</span> <span class="f">}</span>
<a name="163" /><span class="True">     163:</span> 
<a name="164" /><span class="True">     164:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">native_safe_x2apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="165" /><span class="True">     165:</span> <span class="f">{</span>
<a name="166" /><span class="True">     166:</span>     <span class="k">/* no need to wait for icr idle in x2apic */</span>
<a name="167" /><span class="True">     167:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="168" /><span class="True">     168:</span> <span class="f">}</span>
<a name="169" /><span class="True">     169:</span> 
<a name="170" /><span class="True">     170:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_x2apic_icr_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">low</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">id</span><span class="f">)</span>
<a name="171" /><span class="True">     171:</span> <span class="f">{</span>
<a name="172" /><span class="True">     172:</span>     <span class="b">wrmsrl</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19CQVNFX01TUl8w"><span class="b">APIC_BASE_MSR</span></a> <span class="f">+</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19JQ1JfMA__"><span class="b">APIC_ICR</span></a> <span class="f">&gt;&gt;</span> <span class="c">4</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="f">(</span><span class="b">__u64</span><span class="f">)</span> <span class="b">id</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="c">32</span> <span class="f">|</span> <span class="b">low</span><span class="f">)</span><span class="f">;</span>
<a name="173" /><span class="True">     173:</span> <span class="f">}</span>
<a name="174" /><span class="True">     174:</span> 
<a name="175" /><span class="True">     175:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">native_x2apic_icr_read</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="176" /><span class="True">     176:</span> <span class="f">{</span>
<a name="177" /><span class="True">     177:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">val</span><span class="f">;</span>
<a name="178" /><span class="True">     178:</span> 
<a name="179" /><span class="True">     179:</span>     <span class="b">rdmsrl</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19CQVNFX01TUl8w"><span class="b">APIC_BASE_MSR</span></a> <span class="f">+</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19JQ1JfMA__"><span class="b">APIC_ICR</span></a> <span class="f">&gt;&gt;</span> <span class="c">4</span><span class="f">)</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span><span class="f">;</span>
<a name="180" /><span class="True">     180:</span>     <span class="m">return</span> <span class="b">val</span><span class="f">;</span>
<a name="181" /><span class="True">     181:</span> <span class="f">}</span>
<a name="182" /><span class="True">     182:</span> 
<a name="183" /><span class="True">     183:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">x2apic_phys</span><span class="f">;</span>
<a name="184" /><span class="True">     184:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">x2apic_preenabled</span><span class="f">;</span>
<a name="185" /><span class="True">     185:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">check_x2apic</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="186" /><span class="True">     186:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">enable_x2apic</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="187" /><span class="True">     187:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">x2apic_icr_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">low</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">id</span><span class="f">)</span><span class="f">;</span>
<a name="188" /><span class="True">     188:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">x2apic_enabled</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="189" /><span class="True">     189:</span> <span class="f">{</span>
<a name="190" /><span class="True">     190:</span>     <span class="b">u64</span> <span class="b">msr</span><span class="f">;</span>
<a name="191" /><span class="True">     191:</span> 
<a name="192" /><span class="True">     192:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><a href="cpu.c_macros_ref.html#_Y3B1X2hhc194MmFwaWNfMA__"><span class="b">cpu_has_x2apic</span></a><span class="f">)</span>
<a name="193" /><span class="True">     193:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="194" /><span class="True">     194:</span> 
<a name="195" /><span class="True">     195:</span>     <span class="b">rdmsrl</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_TVNSX0lBMzJfQVBJQ0JBU0VfMA__"><span class="b">MSR_IA32_APICBASE</span></a><span class="f">,</span> <span class="b">msr</span><span class="f">)</span><span class="f">;</span>
<a name="196" /><span class="True">     196:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">msr</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_WDJBUElDX0VOQUJMRV8w"><span class="b">X2APIC_ENABLE</span></a><span class="f">)</span>
<a name="197" /><span class="True">     197:</span>         <span class="m">return</span> <span class="c">1</span><span class="f">;</span>
<a name="198" /><span class="True">     198:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="199" /><span class="True">     199:</span> <span class="f">}</span>
<a name="200" /><span class="True">     200:</span> 
<a name="201" /><span class="True">     201:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_eDJhcGljX3N1cHBvcnRlZF8w"><span class="b">x2apic_supported</span></a><span class="f">(</span><span class="f">)</span>    <span class="f">(</span><a href="cpu.c_macros_ref.html#_Y3B1X2hhc194MmFwaWNfMA__"><span class="b">cpu_has_x2apic</span></a><span class="f">)</span>
<a name="202" /><span class="True">     202:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">x2apic_force_phys</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="203" /><span class="True">     203:</span> <span class="f">{</span>
<a name="204" /><span class="True">     204:</span>     <span class="b">x2apic_phys</span> <span class="f">=</span> <span class="c">1</span><span class="f">;</span>
<a name="205" /><span class="True">     205:</span> <span class="f">}</span>
<a name="206" /><span class="False">     206:</span> <span class="f">#</span><span class="n">else</span>
<a name="207" /><span class="False">     207:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">disable_x2apic</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="208" /><span class="False">     208:</span> <span class="f">{</span>
<a name="209" /><span class="False">     209:</span> <span class="f">}</span>
<a name="210" /><span class="False">     210:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">check_x2apic</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="211" /><span class="False">     211:</span> <span class="f">{</span>
<a name="212" /><span class="False">     212:</span> <span class="f">}</span>
<a name="213" /><span class="False">     213:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">enable_x2apic</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="214" /><span class="False">     214:</span> <span class="f">{</span>
<a name="215" /><span class="False">     215:</span> <span class="f">}</span>
<a name="216" /><span class="False">     216:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">x2apic_enabled</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="217" /><span class="False">     217:</span> <span class="f">{</span>
<a name="218" /><span class="False">     218:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="219" /><span class="False">     219:</span> <span class="f">}</span>
<a name="220" /><span class="False">     220:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">x2apic_force_phys</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="221" /><span class="False">     221:</span> <span class="f">{</span>
<a name="222" /><span class="False">     222:</span> <span class="f">}</span>
<a name="223" /><span class="False">     223:</span> 
<a name="224" /><span class="False">     224:</span> <span class="f">#</span><span class="n">define</span>    <span class="b">nox2apic</span>    <span class="c">0</span>
<a name="225" /><span class="False">     225:</span> <span class="f">#</span><span class="n">define</span>    <span class="b">x2apic_preenabled</span> <span class="c">0</span>
<a name="226" /><span class="False">     226:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_eDJhcGljX3N1cHBvcnRlZF8w"><span class="b">x2apic_supported</span></a><span class="f">(</span><span class="f">)</span>    <span class="c">0</span>
<a name="227" /><span class="True">     227:</span> <span class="f">#</span><span class="n">endif</span>
<a name="228" /><span class="True">     228:</span> 
<a name="229" /><span class="True">     229:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">enable_IR_x2apic</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="230" /><span class="True">     230:</span> 
<a name="231" /><span class="True">     231:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">get_physical_broadcast</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="232" /><span class="True">     232:</span> 
<a name="233" /><span class="True">     233:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">lapic_get_maxlvt</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="234" /><span class="True">     234:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">clear_local_APIC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="235" /><span class="True">     235:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">connect_bsp_APIC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="236" /><span class="True">     236:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">disconnect_bsp_APIC</span><span class="f">(</span><span class="m">int</span> <span class="b">virt_wire_setup</span><span class="f">)</span><span class="f">;</span>
<a name="237" /><span class="True">     237:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">disable_local_APIC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="238" /><span class="True">     238:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">lapic_shutdown</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="239" /><span class="True">     239:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">verify_local_APIC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="240" /><span class="True">     240:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">sync_Arb_IDs</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="241" /><span class="True">     241:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">init_bsp_APIC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="242" /><span class="True">     242:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">setup_local_APIC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="243" /><span class="True">     243:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">end_local_APIC_setup</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="244" /><span class="True">     244:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">bsp_end_local_APIC_setup</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="245" /><span class="True">     245:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">init_apic_mappings</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="246" /><span class="True">     246:</span> <span class="m">void</span> <span class="b">register_lapic_address</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">)</span><span class="f">;</span>
<a name="247" /><span class="True">     247:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">setup_boot_APIC_clock</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="248" /><span class="True">     248:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">setup_secondary_APIC_clock</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="249" /><span class="True">     249:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">APIC_init_uniprocessor</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="250" /><span class="True">     250:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">apic_force_enable</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">)</span><span class="f">;</span>
<a name="251" /><span class="True">     251:</span> 
<a name="252" /><span class="True">     252:</span> <span class="k">/*</span>
<a name="253" /><span class="True">     253:</span> <span class="k"> * On 32bit this is mach-xxx local</span>
<a name="254" /><span class="True">     254:</span> <span class="k"> */</span>
<a name="255" /><span class="True">     255:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="256" /><span class="True">     256:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">apic_is_clustered_box</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="257" /><span class="False">     257:</span> <span class="f">#</span><span class="n">else</span>
<a name="258" /><span class="False">     258:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">apic_is_clustered_box</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="259" /><span class="False">     259:</span> <span class="f">{</span>
<a name="260" /><span class="False">     260:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="261" /><span class="False">     261:</span> <span class="f">}</span>
<a name="262" /><span class="True">     262:</span> <span class="f">#</span><span class="n">endif</span>
<a name="263" /><span class="True">     263:</span> 
<a name="264" /><span class="True">     264:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">setup_APIC_eilvt</span><span class="f">(</span><span class="b">u8</span> <span class="b">lvt_off</span><span class="f">,</span> <span class="b">u8</span> <span class="b">vector</span><span class="f">,</span> <span class="b">u8</span> <span class="b">msg_type</span><span class="f">,</span> <span class="b">u8</span> <span class="b">mask</span><span class="f">)</span><span class="f">;</span>
<a name="265" /><span class="True">     265:</span> 
<a name="266" /><span class="False">     266:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* !CONFIG_X86_LOCAL_APIC */</span>
<a name="267" /><span class="False">     267:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">lapic_shutdown</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="268" /><span class="False">     268:</span> <span class="f">#</span><span class="n">define</span> <span class="b">local_apic_timer_c2_ok</span>        <span class="c">1</span>
<a name="269" /><span class="False">     269:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">init_apic_mappings</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="270" /><span class="False">     270:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">disable_local_APIC</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="271" /><span class="False">     271:</span> <span class="f">#</span> <span class="n">define</span> <span class="b">setup_boot_APIC_clock</span> <span class="b">x86_init_noop</span>
<a name="272" /><span class="False">     272:</span> <span class="f">#</span> <span class="n">define</span> <span class="b">setup_secondary_APIC_clock</span> <span class="b">x86_init_noop</span>
<a name="273" /><span class="True">     273:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !CONFIG_X86_LOCAL_APIC */</span>
<a name="274" /><span class="True">     274:</span> 
<a name="275" /><span class="True">     275:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="276" /><span class="True">     276:</span> <span class="f">#</span><span class="n">define</span>    <a href="cpu.c_macros_noref.html#_U0VUX0FQSUNfSURfMA__"><span class="b">SET_APIC_ID</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>        <span class="f">(</span><span class="b">apic</span><span class="f">-&gt;</span><span class="b">set_apic_id</span><span class="f">(</span><span class="b">x</span><span class="f">)</span><span class="f">)</span>
<a name="277" /><span class="False">     277:</span> <span class="f">#</span><span class="n">else</span>
<a name="278" /><span class="False">     278:</span> 
<a name="279" /><span class="True">     279:</span> <span class="f">#</span><span class="n">endif</span>
<a name="280" /><span class="True">     280:</span> 
<a name="281" /><span class="True">     281:</span> <span class="k">/*</span>
<a name="282" /><span class="True">     282:</span> <span class="k"> * Copyright 2004 James Cleverdon, IBM.</span>
<a name="283" /><span class="True">     283:</span> <span class="k"> * Subject to the GNU Public License, v.2</span>
<a name="284" /><span class="True">     284:</span> <span class="k"> *</span>
<a name="285" /><span class="True">     285:</span> <span class="k"> * Generic APIC sub-arch data struct.</span>
<a name="286" /><span class="True">     286:</span> <span class="k"> *</span>
<a name="287" /><span class="True">     287:</span> <span class="k"> * Hacked for x86-64 by James Cleverdon from i386 architecture code by</span>
<a name="288" /><span class="True">     288:</span> <span class="k"> * Martin Bligh, Andi Kleen, James Bottomley, John Stultz, and</span>
<a name="289" /><span class="True">     289:</span> <span class="k"> * James Cleverdon.</span>
<a name="290" /><span class="True">     290:</span> <span class="k"> */</span>
<a name="291" /><span class="True">     291:</span> <span class="m">struct</span> <span class="b">apic</span> <span class="f">{</span>
<a name="292" /><span class="True">     292:</span>     <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">;</span>
<a name="293" /><span class="True">     293:</span> 
<a name="294" /><span class="True">     294:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">probe</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="295" /><span class="True">     295:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">acpi_madt_oem_check</span><span class="f">)</span><span class="f">(</span><span class="m">char</span> <span class="f">*</span><span class="b">oem_id</span><span class="f">,</span> <span class="m">char</span> <span class="f">*</span><span class="b">oem_table_id</span><span class="f">)</span><span class="f">;</span>
<a name="296" /><span class="True">     296:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">apic_id_valid</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="297" /><span class="True">     297:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">apic_id_registered</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="298" /><span class="True">     298:</span> 
<a name="299" /><span class="True">     299:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">irq_delivery_mode</span><span class="f">;</span>
<a name="300" /><span class="True">     300:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">irq_dest_mode</span><span class="f">;</span>
<a name="301" /><span class="True">     301:</span> 
<a name="302" /><span class="True">     302:</span>     <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="f">(</span><span class="f">*</span><span class="b">target_cpus</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="303" /><span class="True">     303:</span> 
<a name="304" /><span class="True">     304:</span>     <span class="m">int</span> <span class="b">disable_esr</span><span class="f">;</span>
<a name="305" /><span class="True">     305:</span> 
<a name="306" /><span class="True">     306:</span>     <span class="m">int</span> <span class="b">dest_logical</span><span class="f">;</span>
<a name="307" /><span class="True">     307:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="f">(</span><span class="f">*</span><span class="b">check_apicid_used</span><span class="f">)</span><span class="f">(</span><span class="b">physid_mask_t</span> <span class="f">*</span><span class="b">map</span><span class="f">,</span> <span class="m">int</span> <span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="308" /><span class="True">     308:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="f">(</span><span class="f">*</span><span class="b">check_apicid_present</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="309" /><span class="True">     309:</span> 
<a name="310" /><span class="True">     310:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">vector_allocation_domain</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">,</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">retmask</span><span class="f">,</span>
<a name="311" /><span class="True">     311:</span>                      <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">)</span><span class="f">;</span>
<a name="312" /><span class="True">     312:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">init_apic_ldr</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="313" /><span class="True">     313:</span> 
<a name="314" /><span class="True">     314:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">ioapic_phys_id_map</span><span class="f">)</span><span class="f">(</span><span class="b">physid_mask_t</span> <span class="f">*</span><span class="b">phys_map</span><span class="f">,</span> <span class="b">physid_mask_t</span> <span class="f">*</span><span class="b">retmap</span><span class="f">)</span><span class="f">;</span>
<a name="315" /><span class="True">     315:</span> 
<a name="316" /><span class="True">     316:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">setup_apic_routing</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="317" /><span class="True">     317:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">multi_timer_check</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">apic</span><span class="f">,</span> <span class="m">int</span> <span class="b">irq</span><span class="f">)</span><span class="f">;</span>
<a name="318" /><span class="True">     318:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">cpu_present_to_apicid</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">mps_cpu</span><span class="f">)</span><span class="f">;</span>
<a name="319" /><span class="True">     319:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">apicid_to_cpu_present</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">phys_apicid</span><span class="f">,</span> <span class="b">physid_mask_t</span> <span class="f">*</span><span class="b">retmap</span><span class="f">)</span><span class="f">;</span>
<a name="320" /><span class="True">     320:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">setup_portio_remap</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="321" /><span class="True">     321:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">check_phys_apicid_present</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">phys_apicid</span><span class="f">)</span><span class="f">;</span>
<a name="322" /><span class="True">     322:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">enable_apic_mode</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="323" /><span class="True">     323:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">phys_pkg_id</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">cpuid_apic</span><span class="f">,</span> <span class="m">int</span> <span class="b">index_msb</span><span class="f">)</span><span class="f">;</span>
<a name="324" /><span class="True">     324:</span> 
<a name="325" /><span class="True">     325:</span>     <span class="k">/*</span>
<a name="326" /><span class="True">     326:</span> <span class="k">     * When one of the next two hooks returns 1 the apic</span>
<a name="327" /><span class="True">     327:</span> <span class="k">     * is switched to this. Essentially they are additional</span>
<a name="328" /><span class="True">     328:</span> <span class="k">     * probe functions:</span>
<a name="329" /><span class="True">     329:</span> <span class="k">     */</span>
<a name="330" /><span class="True">     330:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">mps_oem_check</span><span class="f">)</span><span class="f">(</span><span class="m">struct</span> <span class="b">mpc_table</span> <span class="f">*</span><span class="b">mpc</span><span class="f">,</span> <span class="m">char</span> <span class="f">*</span><span class="b">oem</span><span class="f">,</span> <span class="m">char</span> <span class="f">*</span><span class="b">productid</span><span class="f">)</span><span class="f">;</span>
<a name="331" /><span class="True">     331:</span> 
<a name="332" /><span class="True">     332:</span>     <span class="m">unsigned</span> <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">get_apic_id</span><span class="f">)</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">x</span><span class="f">)</span><span class="f">;</span>
<a name="333" /><span class="True">     333:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="f">(</span><span class="f">*</span><span class="b">set_apic_id</span><span class="f">)</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span> <span class="b">id</span><span class="f">)</span><span class="f">;</span>
<a name="334" /><span class="True">     334:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">apic_id_mask</span><span class="f">;</span>
<a name="335" /><span class="True">     335:</span> 
<a name="336" /><span class="True">     336:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">cpu_mask_to_apicid_and</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">cpumask</span><span class="f">,</span>
<a name="337" /><span class="True">     337:</span>                       <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">andmask</span><span class="f">,</span>
<a name="338" /><span class="True">     338:</span>                       <span class="m">unsigned</span> <span class="m">int</span> <span class="f">*</span><span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="339" /><span class="True">     339:</span> 
<a name="340" /><span class="True">     340:</span>     <span class="k">/* ipi */</span>
<a name="341" /><span class="True">     341:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">send_IPI_mask</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">,</span> <span class="m">int</span> <span class="b">vector</span><span class="f">)</span><span class="f">;</span>
<a name="342" /><span class="True">     342:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">send_IPI_mask_allbutself</span><span class="f">)</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">,</span>
<a name="343" /><span class="True">     343:</span>                      <span class="m">int</span> <span class="b">vector</span><span class="f">)</span><span class="f">;</span>
<a name="344" /><span class="True">     344:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">send_IPI_allbutself</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">vector</span><span class="f">)</span><span class="f">;</span>
<a name="345" /><span class="True">     345:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">send_IPI_all</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">vector</span><span class="f">)</span><span class="f">;</span>
<a name="346" /><span class="True">     346:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">send_IPI_self</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">vector</span><span class="f">)</span><span class="f">;</span>
<a name="347" /><span class="True">     347:</span> 
<a name="348" /><span class="True">     348:</span>     <span class="k">/* wakeup_secondary_cpu */</span>
<a name="349" /><span class="True">     349:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">wakeup_secondary_cpu</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">start_eip</span><span class="f">)</span><span class="f">;</span>
<a name="350" /><span class="True">     350:</span> 
<a name="351" /><span class="True">     351:</span>     <span class="m">int</span> <span class="b">trampoline_phys_low</span><span class="f">;</span>
<a name="352" /><span class="True">     352:</span>     <span class="m">int</span> <span class="b">trampoline_phys_high</span><span class="f">;</span>
<a name="353" /><span class="True">     353:</span> 
<a name="354" /><span class="True">     354:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">wait_for_init_deassert</span><span class="f">)</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="b">deassert</span><span class="f">)</span><span class="f">;</span>
<a name="355" /><span class="True">     355:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">smp_callin_clear_local_apic</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="356" /><span class="True">     356:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">inquire_remote_apic</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="357" /><span class="True">     357:</span> 
<a name="358" /><span class="True">     358:</span>     <span class="k">/* apic ops */</span>
<a name="359" /><span class="True">     359:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="f">(</span><span class="f">*</span><span class="b">read</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">)</span><span class="f">;</span>
<a name="360" /><span class="True">     360:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">write</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">v</span><span class="f">)</span><span class="f">;</span>
<a name="361" /><span class="True">     361:</span>     <span class="k">/*</span>
<a name="362" /><span class="True">     362:</span> <span class="k">     * -&gt;eoi_write() has the same signature as -&gt;write().</span>
<a name="363" /><span class="True">     363:</span> <span class="k">     *</span>
<a name="364" /><span class="True">     364:</span> <span class="k">     * Drivers can support both -&gt;eoi_write() and -&gt;write() by passing the same</span>
<a name="365" /><span class="True">     365:</span> <span class="k">     * callback value. Kernel can override -&gt;eoi_write() and fall back</span>
<a name="366" /><span class="True">     366:</span> <span class="k">     * on write for EOI.</span>
<a name="367" /><span class="True">     367:</span> <span class="k">     */</span>
<a name="368" /><span class="True">     368:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">eoi_write</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">v</span><span class="f">)</span><span class="f">;</span>
<a name="369" /><span class="True">     369:</span>     <span class="b">u64</span> <span class="f">(</span><span class="f">*</span><span class="b">icr_read</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="370" /><span class="True">     370:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">icr_write</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">low</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">high</span><span class="f">)</span><span class="f">;</span>
<a name="371" /><span class="True">     371:</span>     <span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">wait_icr_idle</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="372" /><span class="True">     372:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="f">(</span><span class="f">*</span><span class="b">safe_wait_icr_idle</span><span class="f">)</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="373" /><span class="True">     373:</span> 
<a name="374" /><span class="False">     374:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="375" /><span class="False">     375:</span>     <span class="k">/*</span>
<a name="376" /><span class="False">     376:</span> <span class="k">     * Called very early during boot from get_smp_config().  It should</span>
<a name="377" /><span class="False">     377:</span> <span class="k">     * return the logical apicid.  x86_[bios]_cpu_to_apicid is</span>
<a name="378" /><span class="False">     378:</span> <span class="k">     * initialized before this function is called.</span>
<a name="379" /><span class="False">     379:</span> <span class="k">     *</span>
<a name="380" /><span class="False">     380:</span> <span class="k">     * If logical apicid can&apos;t be determined that early, the function</span>
<a name="381" /><span class="False">     381:</span> <span class="k">     * may return BAD_APICID.  Logical apicid will be configured after</span>
<a name="382" /><span class="False">     382:</span> <span class="k">     * init_apic_ldr() while bringing up CPUs.  Note that NUMA affinity</span>
<a name="383" /><span class="False">     383:</span> <span class="k">     * won&apos;t be applied properly during early boot in this case.</span>
<a name="384" /><span class="False">     384:</span> <span class="k">     */</span>
<a name="385" /><span class="False">     385:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">x86_32_early_logical_apicid</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">)</span><span class="f">;</span>
<a name="386" /><span class="False">     386:</span> 
<a name="387" /><span class="False">     387:</span>     <span class="k">/*</span>
<a name="388" /><span class="False">     388:</span> <span class="k">     * Optional method called from setup_local_APIC() after logical</span>
<a name="389" /><span class="False">     389:</span> <span class="k">     * apicid is guaranteed to be known to initialize apicid -&gt; node</span>
<a name="390" /><span class="False">     390:</span> <span class="k">     * mapping if NUMA initialization hasn&apos;t done so already.  Don&apos;t</span>
<a name="391" /><span class="False">     391:</span> <span class="k">     * add new users.</span>
<a name="392" /><span class="False">     392:</span> <span class="k">     */</span>
<a name="393" /><span class="False">     393:</span>     <span class="m">int</span> <span class="f">(</span><span class="f">*</span><span class="b">x86_32_numa_cpu_node</span><span class="f">)</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">)</span><span class="f">;</span>
<a name="394" /><span class="True">     394:</span> <span class="f">#</span><span class="n">endif</span>
<a name="395" /><span class="True">     395:</span> <span class="f">}</span><span class="f">;</span>
<a name="396" /><span class="True">     396:</span> 
<a name="397" /><span class="True">     397:</span> <span class="k">/*</span>
<a name="398" /><span class="True">     398:</span> <span class="k"> * Pointer to the local APIC driver in use on this system (there&apos;s</span>
<a name="399" /><span class="True">     399:</span> <span class="k"> * always just one such driver in use - the kernel decides via an</span>
<a name="400" /><span class="True">     400:</span> <span class="k"> * early probing process which one it picks - and then sticks to it):</span>
<a name="401" /><span class="True">     401:</span> <span class="k"> */</span>
<a name="402" /><span class="True">     402:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">apic</span> <span class="f">*</span><span class="b">apic</span><span class="f">;</span>
<a name="403" /><span class="True">     403:</span> 
<a name="404" /><span class="True">     404:</span> <span class="k">/*</span>
<a name="405" /><span class="True">     405:</span> <span class="k"> * APIC drivers are probed based on how they are listed in the .apicdrivers</span>
<a name="406" /><span class="True">     406:</span> <span class="k"> * section. So the order is important and enforced by the ordering</span>
<a name="407" /><span class="True">     407:</span> <span class="k"> * of different apic driver files in the Makefile.</span>
<a name="408" /><span class="True">     408:</span> <span class="k"> *</span>
<a name="409" /><span class="True">     409:</span> <span class="k"> * For the files having two apic drivers, we use apic_drivers()</span>
<a name="410" /><span class="True">     410:</span> <span class="k"> * to enforce the order with in them.</span>
<a name="411" /><span class="True">     411:</span> <span class="k"> */</span>
<a name="412" /><span class="True">     412:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXBpY19kcml2ZXJfMA__"><span class="b">apic_driver</span></a><span class="f">(</span><span class="b">sym</span><span class="f">)</span>                    \
<a name="413" /><span class="True">     413:</span>     <span class="m">static</span> <span class="m">const</span> <span class="m">struct</span> <span class="b">apic</span> <span class="f">*</span><span class="b">__apicdrivers_</span><span class="f">##</span><span class="b">sym</span> <a href="cpu.c_macros_ref.html#_X191c2VkXzA_"><span class="b">__used</span></a>        \
<a name="414" /><span class="True">     414:</span>     <a href="cpu.c_macros_ref.html#_X19hbGlnbmVkXzA_"><span class="b">__aligned</span></a><span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="m">struct</span> <span class="b">apic</span> <span class="f">*</span><span class="f">)</span><span class="f">)</span>            \
<a name="415" /><span class="True">     415:</span>     <a href="cpu.c_macros_ref.html#_X19zZWN0aW9uXzA_"><span class="b">__section</span></a><span class="f">(</span><span class="f">.</span><span class="b">apicdrivers</span><span class="f">)</span> <span class="f">=</span> <span class="f">{</span> <span class="f">&amp;</span><span class="b">sym</span> <span class="f">}</span>
<a name="416" /><span class="True">     416:</span> 
<a name="417" /><span class="True">     417:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXBpY19kcml2ZXJzXzA_"><span class="b">apic_drivers</span></a><span class="f">(</span><span class="b">sym1</span><span class="f">,</span> <span class="b">sym2</span><span class="f">)</span>                    \
<a name="418" /><span class="True">     418:</span>     <span class="m">static</span> <span class="m">struct</span> <span class="b">apic</span> <span class="f">*</span><span class="b">__apicdrivers_</span><span class="f">##</span><span class="b">sym1</span><span class="f">##</span><span class="b">sym2</span><span class="f">[</span><span class="c">2</span><span class="f">]</span> <a href="cpu.c_macros_ref.html#_X191c2VkXzA_"><span class="b">__used</span></a>    \
<a name="419" /><span class="True">     419:</span>     <a href="cpu.c_macros_ref.html#_X19hbGlnbmVkXzA_"><span class="b">__aligned</span></a><span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="m">struct</span> <span class="b">apic</span> <span class="f">*</span><span class="f">)</span><span class="f">)</span>                \
<a name="420" /><span class="True">     420:</span>     <a href="cpu.c_macros_ref.html#_X19zZWN0aW9uXzA_"><span class="b">__section</span></a><span class="f">(</span><span class="f">.</span><span class="b">apicdrivers</span><span class="f">)</span> <span class="f">=</span> <span class="f">{</span> <span class="f">&amp;</span><span class="b">sym1</span><span class="f">,</span> <span class="f">&amp;</span><span class="b">sym2</span> <span class="f">}</span>
<a name="421" /><span class="True">     421:</span> 
<a name="422" /><span class="True">     422:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">apic</span> <span class="f">*</span><span class="b">__apicdrivers</span><span class="f">[</span><span class="f">]</span><span class="f">,</span> <span class="f">*</span><span class="b">__apicdrivers_end</span><span class="f">[</span><span class="f">]</span><span class="f">;</span>
<a name="423" /><span class="True">     423:</span> 
<a name="424" /><span class="True">     424:</span> <span class="k">/*</span>
<a name="425" /><span class="True">     425:</span> <span class="k"> * APIC functionality to boot other CPUs - only used on SMP:</span>
<a name="426" /><span class="True">     426:</span> <span class="k"> */</span>
<a name="427" /><span class="True">     427:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="428" /><span class="True">     428:</span> <span class="m">extern</span> <span class="b">atomic_t</span> <span class="b">init_deasserted</span><span class="f">;</span>
<a name="429" /><span class="True">     429:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">wakeup_secondary_cpu_via_nmi</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">start_eip</span><span class="f">)</span><span class="f">;</span>
<a name="430" /><span class="True">     430:</span> <span class="f">#</span><span class="n">endif</span>
<a name="431" /><span class="True">     431:</span> 
<a name="432" /><span class="True">     432:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9MT0NBTF9BUElDXzA_"><span class="b">CONFIG_X86_LOCAL_APIC</span></a>
<a name="433" /><span class="True">     433:</span> 
<a name="434" /><span class="True">     434:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">apic_read</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">)</span>
<a name="435" /><span class="True">     435:</span> <span class="f">{</span>
<a name="436" /><span class="True">     436:</span>     <span class="m">return</span> <span class="b">apic</span><span class="f">-&gt;</span><span class="b">read</span><span class="f">(</span><span class="b">reg</span><span class="f">)</span><span class="f">;</span>
<a name="437" /><span class="True">     437:</span> <span class="f">}</span>
<a name="438" /><span class="True">     438:</span> 
<a name="439" /><span class="True">     439:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">val</span><span class="f">)</span>
<a name="440" /><span class="True">     440:</span> <span class="f">{</span>
<a name="441" /><span class="True">     441:</span>     <span class="b">apic</span><span class="f">-&gt;</span><span class="b">write</span><span class="f">(</span><span class="b">reg</span><span class="f">,</span> <span class="b">val</span><span class="f">)</span><span class="f">;</span>
<a name="442" /><span class="True">     442:</span> <span class="f">}</span>
<a name="443" /><span class="True">     443:</span> 
<a name="444" /><span class="True">     444:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_eoi</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="445" /><span class="True">     445:</span> <span class="f">{</span>
<a name="446" /><span class="True">     446:</span>     <span class="b">apic</span><span class="f">-&gt;</span><span class="b">eoi_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19FT0lfMA__"><span class="b">APIC_EOI</span></a><span class="f">,</span> <a href="cpu.c_macros_ref.html#_QVBJQ19FT0lfQUNLXzA_"><span class="b">APIC_EOI_ACK</span></a><span class="f">)</span><span class="f">;</span>
<a name="447" /><span class="True">     447:</span> <span class="f">}</span>
<a name="448" /><span class="True">     448:</span> 
<a name="449" /><span class="True">     449:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">apic_icr_read</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="450" /><span class="True">     450:</span> <span class="f">{</span>
<a name="451" /><span class="True">     451:</span>     <span class="m">return</span> <span class="b">apic</span><span class="f">-&gt;</span><span class="b">icr_read</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="452" /><span class="True">     452:</span> <span class="f">}</span>
<a name="453" /><span class="True">     453:</span> 
<a name="454" /><span class="True">     454:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_icr_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">low</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">high</span><span class="f">)</span>
<a name="455" /><span class="True">     455:</span> <span class="f">{</span>
<a name="456" /><span class="True">     456:</span>     <span class="b">apic</span><span class="f">-&gt;</span><span class="b">icr_write</span><span class="f">(</span><span class="b">low</span><span class="f">,</span> <span class="b">high</span><span class="f">)</span><span class="f">;</span>
<a name="457" /><span class="True">     457:</span> <span class="f">}</span>
<a name="458" /><span class="True">     458:</span> 
<a name="459" /><span class="True">     459:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="460" /><span class="True">     460:</span> <span class="f">{</span>
<a name="461" /><span class="True">     461:</span>     <span class="b">apic</span><span class="f">-&gt;</span><span class="b">wait_icr_idle</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="462" /><span class="True">     462:</span> <span class="f">}</span>
<a name="463" /><span class="True">     463:</span> 
<a name="464" /><span class="True">     464:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">safe_apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="465" /><span class="True">     465:</span> <span class="f">{</span>
<a name="466" /><span class="True">     466:</span>     <span class="m">return</span> <span class="b">apic</span><span class="f">-&gt;</span><span class="b">safe_wait_icr_idle</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="467" /><span class="True">     467:</span> <span class="f">}</span>
<a name="468" /><span class="True">     468:</span> 
<a name="469" /><span class="True">     469:</span> <span class="m">extern</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19pbml0XzA_"><span class="b">__init</span></a> <span class="b">apic_set_eoi_write</span><span class="f">(</span><span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">eoi_write</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">v</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="470" /><span class="True">     470:</span> 
<a name="471" /><span class="False">     471:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* CONFIG_X86_LOCAL_APIC */</span>
<a name="472" /><span class="False">     472:</span> 
<a name="473" /><span class="False">     473:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">apic_read</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">)</span> <span class="f">{</span> <span class="m">return</span> <span class="c">0</span><span class="f">;</span> <span class="f">}</span>
<a name="474" /><span class="False">     474:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">val</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="475" /><span class="False">     475:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_eoi</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="476" /><span class="False">     476:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">u64</span> <span class="b">apic_icr_read</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="m">return</span> <span class="c">0</span><span class="f">;</span> <span class="f">}</span>
<a name="477" /><span class="False">     477:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_icr_write</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">low</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">high</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="478" /><span class="False">     478:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="f">}</span>
<a name="479" /><span class="False">     479:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">safe_apic_wait_icr_idle</span><span class="f">(</span><span class="m">void</span><span class="f">)</span> <span class="f">{</span> <span class="m">return</span> <span class="c">0</span><span class="f">;</span> <span class="f">}</span>
<a name="480" /><span class="False">     480:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">apic_set_eoi_write</span><span class="f">(</span><span class="m">void</span> <span class="f">(</span><span class="f">*</span><span class="b">eoi_write</span><span class="f">)</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">reg</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">v</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span><span class="f">}</span>
<a name="481" /><span class="False">     481:</span> 
<a name="482" /><span class="True">     482:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_X86_LOCAL_APIC */</span>
<a name="483" /><span class="True">     483:</span> 
<a name="484" /><span class="True">     484:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">ack_APIC_irq</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="485" /><span class="True">     485:</span> <span class="f">{</span>
<a name="486" /><span class="True">     486:</span>     <span class="k">/*</span>
<a name="487" /><span class="True">     487:</span> <span class="k">     * ack_APIC_irq() actually gets compiled as a single instruction</span>
<a name="488" /><span class="True">     488:</span> <span class="k">     * ... yummie.</span>
<a name="489" /><span class="True">     489:</span> <span class="k">     */</span>
<a name="490" /><span class="True">     490:</span>     <span class="b">apic_eoi</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="491" /><span class="True">     491:</span> <span class="f">}</span>
<a name="492" /><span class="True">     492:</span> 
<a name="493" /><span class="True">     493:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="b">default_get_apic_id</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">x</span><span class="f">)</span>
<a name="494" /><span class="True">     494:</span> <span class="f">{</span>
<a name="495" /><span class="True">     495:</span>     <span class="m">unsigned</span> <span class="m">int</span> <span class="b">ver</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_R0VUX0FQSUNfVkVSU0lPTl8w"><span class="b">GET_APIC_VERSION</span></a><span class="f">(</span><span class="b">apic_read</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19MVlJfMA__"><span class="b">APIC_LVR</span></a><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="496" /><span class="True">     496:</span> 
<a name="497" /><span class="True">     497:</span>     <span class="m">if</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19YQVBJQ18w"><span class="b">APIC_XAPIC</span></a><span class="f">(</span><span class="b">ver</span><span class="f">)</span> <span class="f">||</span> <a href="cpu.c_macros_ref.html#_Ym9vdF9jcHVfaGFzXzA_"><span class="b">boot_cpu_has</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_WDg2X0ZFQVRVUkVfRVhURF9BUElDSURfMA__"><span class="b">X86_FEATURE_EXTD_APICID</span></a><span class="f">)</span><span class="f">)</span>
<a name="498" /><span class="True">     498:</span>         <span class="m">return</span> <span class="f">(</span><span class="b">x</span> <span class="f">&gt;&gt;</span> <span class="c">24</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xFF</span><span class="f">;</span>
<a name="499" /><span class="True">     499:</span>     <span class="m">else</span>
<a name="500" /><span class="True">     500:</span>         <span class="m">return</span> <span class="f">(</span><span class="b">x</span> <span class="f">&gt;&gt;</span> <span class="c">24</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0x0F</span><span class="f">;</span>
<a name="501" /><span class="True">     501:</span> <span class="f">}</span>
<a name="502" /><span class="True">     502:</span> 
<a name="503" /><span class="True">     503:</span> <span class="k">/*</span>
<a name="504" /><span class="True">     504:</span> <span class="k"> * Warm reset vector default position:</span>
<a name="505" /><span class="True">     505:</span> <span class="k"> */</span>
<a name="506" /><span class="True">     506:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfTE9XXzA_"><span class="b">DEFAULT_TRAMPOLINE_PHYS_LOW</span></a>        <span class="c">0x467</span>
<a name="507" /><span class="True">     507:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGQVVMVF9UUkFNUE9MSU5FX1BIWVNfSElHSF8w"><span class="b">DEFAULT_TRAMPOLINE_PHYS_HIGH</span></a>        <span class="c">0x469</span>
<a name="508" /><span class="True">     508:</span> 
<a name="509" /><span class="True">     509:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="510" /><span class="True">     510:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">default_acpi_madt_oem_check</span><span class="f">(</span><span class="m">char</span> <span class="f">*</span><span class="f">,</span> <span class="m">char</span> <span class="f">*</span><span class="f">)</span><span class="f">;</span>
<a name="511" /><span class="True">     511:</span> 
<a name="512" /><span class="True">     512:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">apic_send_IPI_self</span><span class="f">(</span><span class="m">int</span> <span class="b">vector</span><span class="f">)</span><span class="f">;</span>
<a name="513" /><span class="True">     513:</span> 
<a name="514" /><span class="True">     514:</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVXzA_"><span class="b">DECLARE_PER_CPU</span></a><span class="f">(</span><span class="m">int</span><span class="f">,</span> <span class="b">x2apic_extra_bits</span><span class="f">)</span><span class="f">;</span>
<a name="515" /><span class="True">     515:</span> 
<a name="516" /><span class="True">     516:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">default_cpu_present_to_apicid</span><span class="f">(</span><span class="m">int</span> <span class="b">mps_cpu</span><span class="f">)</span><span class="f">;</span>
<a name="517" /><span class="True">     517:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">default_check_phys_apicid_present</span><span class="f">(</span><span class="m">int</span> <span class="b">phys_apicid</span><span class="f">)</span><span class="f">;</span>
<a name="518" /><span class="True">     518:</span> <span class="f">#</span><span class="n">endif</span>
<a name="519" /><span class="True">     519:</span> 
<a name="520" /><span class="True">     520:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">default_wait_for_init_deassert</span><span class="f">(</span><span class="b">atomic_t</span> <span class="f">*</span><span class="b">deassert</span><span class="f">)</span>
<a name="521" /><span class="True">     521:</span> <span class="f">{</span>
<a name="522" /><span class="True">     522:</span>     <span class="m">while</span> <span class="f">(</span><span class="f">!</span><span class="b">atomic_read</span><span class="f">(</span><span class="b">deassert</span><span class="f">)</span><span class="f">)</span>
<a name="523" /><span class="True">     523:</span>         <span class="b">cpu_relax</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="524" /><span class="True">     524:</span>     <span class="m">return</span><span class="f">;</span>
<a name="525" /><span class="True">     525:</span> <span class="f">}</span>
<a name="526" /><span class="True">     526:</span> 
<a name="527" /><span class="True">     527:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">generic_bigsmp_probe</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="528" /><span class="True">     528:</span> 
<a name="529" /><span class="True">     529:</span> 
<a name="530" /><span class="True">     530:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl9MT0NBTF9BUElDXzA_"><span class="b">CONFIG_X86_LOCAL_APIC</span></a>
<a name="531" /><span class="True">     531:</span> 
<a name="532" /><span class="True">     532:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">smp</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="533" /><span class="True">     533:</span> 
<a name="534" /><span class="True">     534:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_QVBJQ19ERlJfVkFMVUVfMA__"><span class="b">APIC_DFR_VALUE</span></a>    <span class="f">(</span><a href="cpu.c_macros_noref.html#_QVBJQ19ERlJfRkxBVF8w"><span class="b">APIC_DFR_FLAT</span></a><span class="f">)</span>
<a name="535" /><span class="True">     535:</span> 
<a name="536" /><span class="True">     536:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">default_target_cpus</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="537" /><span class="True">     537:</span> <span class="f">{</span>
<a name="538" /><span class="True">     538:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1NNUF8w"><span class="b">CONFIG_SMP</span></a>
<a name="539" /><span class="True">     539:</span>     <span class="m">return</span> <span class="b">cpu_online_mask</span><span class="f">;</span>
<a name="540" /><span class="False">     540:</span> <span class="f">#</span><span class="n">else</span>
<a name="541" /><span class="False">     541:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_Y3B1bWFza19vZl8w"><span class="b">cpumask_of</span></a><span class="f">(</span><span class="c">0</span><span class="f">)</span><span class="f">;</span>
<a name="542" /><span class="True">     542:</span> <span class="f">#</span><span class="n">endif</span>
<a name="543" /><span class="True">     543:</span> <span class="f">}</span>
<a name="544" /><span class="True">     544:</span> 
<a name="545" /><span class="True">     545:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">online_target_cpus</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="546" /><span class="True">     546:</span> <span class="f">{</span>
<a name="547" /><span class="True">     547:</span>     <span class="m">return</span> <span class="b">cpu_online_mask</span><span class="f">;</span>
<a name="548" /><span class="True">     548:</span> <span class="f">}</span>
<a name="549" /><span class="True">     549:</span> 
<a name="550" /><span class="True">     550:</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9FQVJMWV9QRVJfQ1BVX1JFQURfTU9TVExZXzA_"><span class="b">DECLARE_EARLY_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">u16</span><span class="f">,</span> <span class="b">x86_bios_cpu_apicid</span><span class="f">)</span><span class="f">;</span>
<a name="551" /><span class="True">     551:</span> 
<a name="552" /><span class="True">     552:</span> 
<a name="553" /><span class="True">     553:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">int</span> <span class="b">read_apic_id</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="554" /><span class="True">     554:</span> <span class="f">{</span>
<a name="555" /><span class="True">     555:</span>     <span class="m">unsigned</span> <span class="m">int</span> <span class="b">reg</span><span class="f">;</span>
<a name="556" /><span class="True">     556:</span> 
<a name="557" /><span class="True">     557:</span>     <span class="b">reg</span> <span class="f">=</span> <span class="b">apic_read</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_QVBJQ19JRF8w"><span class="b">APIC_ID</span></a><span class="f">)</span><span class="f">;</span>
<a name="558" /><span class="True">     558:</span> 
<a name="559" /><span class="True">     559:</span>     <span class="m">return</span> <span class="b">apic</span><span class="f">-&gt;</span><span class="b">get_apic_id</span><span class="f">(</span><span class="b">reg</span><span class="f">)</span><span class="f">;</span>
<a name="560" /><span class="True">     560:</span> <span class="f">}</span>
<a name="561" /><span class="True">     561:</span> 
<a name="562" /><span class="True">     562:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">default_apic_id_valid</span><span class="f">(</span><span class="m">int</span> <span class="b">apicid</span><span class="f">)</span>
<a name="563" /><span class="True">     563:</span> <span class="f">{</span>
<a name="564" /><span class="True">     564:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">apicid</span> <span class="f">&lt;</span> <span class="c">255</span><span class="f">)</span><span class="f">;</span>
<a name="565" /><span class="True">     565:</span> <span class="f">}</span>
<a name="566" /><span class="True">     566:</span> 
<a name="567" /><span class="True">     567:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">default_setup_apic_routing</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="568" /><span class="True">     568:</span> 
<a name="569" /><span class="True">     569:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">apic</span> <span class="b">apic_noop</span><span class="f">;</span>
<a name="570" /><span class="True">     570:</span> 
<a name="571" /><span class="False">     571:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="572" /><span class="False">     572:</span> 
<a name="573" /><span class="False">     573:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">noop_x86_32_early_logical_apicid</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">)</span>
<a name="574" /><span class="False">     574:</span> <span class="f">{</span>
<a name="575" /><span class="False">     575:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_QkFEX0FQSUNJRF8w"><span class="b">BAD_APICID</span></a><span class="f">;</span>
<a name="576" /><span class="False">     576:</span> <span class="f">}</span>
<a name="577" /><span class="False">     577:</span> 
<a name="578" /><span class="False">     578:</span> <span class="k">/*</span>
<a name="579" /><span class="False">     579:</span> <span class="k"> * Set up the logical destination ID.</span>
<a name="580" /><span class="False">     580:</span> <span class="k"> *</span>
<a name="581" /><span class="False">     581:</span> <span class="k"> * Intel recommends to set DFR, LDR and TPR before enabling</span>
<a name="582" /><span class="False">     582:</span> <span class="k"> * an APIC.  See e.g. &quot;AP-388 82489DX User&apos;s Manual&quot; (Intel</span>
<a name="583" /><span class="False">     583:</span> <span class="k"> * document number 292116).  So here it goes...</span>
<a name="584" /><span class="False">     584:</span> <span class="k"> */</span>
<a name="585" /><span class="False">     585:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">default_init_apic_ldr</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="586" /><span class="False">     586:</span> 
<a name="587" /><span class="False">     587:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">default_apic_id_registered</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="588" /><span class="False">     588:</span> <span class="f">{</span>
<a name="589" /><span class="False">     589:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cGh5c2lkX2lzc2V0XzA_"><span class="b">physid_isset</span></a><span class="f">(</span><span class="b">read_apic_id</span><span class="f">(</span><span class="f">)</span><span class="f">,</span> <span class="b">phys_cpu_present_map</span><span class="f">)</span><span class="f">;</span>
<a name="590" /><span class="False">     590:</span> <span class="f">}</span>
<a name="591" /><span class="False">     591:</span> 
<a name="592" /><span class="False">     592:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">default_phys_pkg_id</span><span class="f">(</span><span class="m">int</span> <span class="b">cpuid_apic</span><span class="f">,</span> <span class="m">int</span> <span class="b">index_msb</span><span class="f">)</span>
<a name="593" /><span class="False">     593:</span> <span class="f">{</span>
<a name="594" /><span class="False">     594:</span>     <span class="m">return</span> <span class="b">cpuid_apic</span> <span class="f">&gt;&gt;</span> <span class="b">index_msb</span><span class="f">;</span>
<a name="595" /><span class="False">     595:</span> <span class="f">}</span>
<a name="596" /><span class="False">     596:</span> 
<a name="597" /><span class="True">     597:</span> <span class="f">#</span><span class="n">endif</span>
<a name="598" /><span class="True">     598:</span> 
<a name="599" /><span class="True">     599:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span>
<a name="600" /><span class="True">     600:</span> <span class="b">flat_cpu_mask_to_apicid_and</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">cpumask</span><span class="f">,</span>
<a name="601" /><span class="True">     601:</span>                 <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">andmask</span><span class="f">,</span>
<a name="602" /><span class="True">     602:</span>                 <span class="m">unsigned</span> <span class="m">int</span> <span class="f">*</span><span class="b">apicid</span><span class="f">)</span>
<a name="603" /><span class="True">     603:</span> <span class="f">{</span>
<a name="604" /><span class="True">     604:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">cpu_mask</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Y3B1bWFza19iaXRzXzA_"><span class="b">cpumask_bits</span></a><span class="f">(</span><span class="b">cpumask</span><span class="f">)</span><span class="f">[</span><span class="c">0</span><span class="f">]</span> <span class="f">&amp;</span>
<a name="605" /><span class="True">     605:</span>                  <a href="cpu.c_macros_ref.html#_Y3B1bWFza19iaXRzXzA_"><span class="b">cpumask_bits</span></a><span class="f">(</span><span class="b">andmask</span><span class="f">)</span><span class="f">[</span><span class="c">0</span><span class="f">]</span> <span class="f">&amp;</span>
<a name="606" /><span class="True">     606:</span>                  <a href="cpu.c_macros_ref.html#_Y3B1bWFza19iaXRzXzA_"><span class="b">cpumask_bits</span></a><span class="f">(</span><span class="b">cpu_online_mask</span><span class="f">)</span><span class="f">[</span><span class="c">0</span><span class="f">]</span> <span class="f">&amp;</span>
<a name="607" /><span class="True">     607:</span>                  <a href="cpu.c_macros_ref.html#_QVBJQ19BTExfQ1BVU18w"><span class="b">APIC_ALL_CPUS</span></a><span class="f">;</span>
<a name="608" /><span class="True">     608:</span> 
<a name="609" /><span class="True">     609:</span>     <span class="m">if</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_bGlrZWx5XzA_"><span class="b">likely</span></a><span class="f">(</span><span class="b">cpu_mask</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="610" /><span class="True">     610:</span>         <span class="f">*</span><span class="b">apicid</span> <span class="f">=</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">int</span><span class="f">)</span><span class="b">cpu_mask</span><span class="f">;</span>
<a name="611" /><span class="True">     611:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="612" /><span class="True">     612:</span>     <span class="f">}</span> <span class="m">else</span> <span class="f">{</span>
<a name="613" /><span class="True">     613:</span>         <span class="m">return</span> <span class="f">-</span><a href="cpu.c_macros_ref.html#_RUlOVkFMXzA_"><span class="b">EINVAL</span></a><span class="f">;</span>
<a name="614" /><span class="True">     614:</span>     <span class="f">}</span>
<a name="615" /><span class="True">     615:</span> <span class="f">}</span>
<a name="616" /><span class="True">     616:</span> 
<a name="617" /><span class="True">     617:</span> <span class="m">extern</span> <span class="m">int</span>
<a name="618" /><span class="True">     618:</span> <span class="b">default_cpu_mask_to_apicid_and</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">cpumask</span><span class="f">,</span>
<a name="619" /><span class="True">     619:</span>                    <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">andmask</span><span class="f">,</span>
<a name="620" /><span class="True">     620:</span>                    <span class="m">unsigned</span> <span class="m">int</span> <span class="f">*</span><span class="b">apicid</span><span class="f">)</span><span class="f">;</span>
<a name="621" /><span class="True">     621:</span> 
<a name="622" /><span class="True">     622:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="623" /><span class="True">     623:</span> <span class="b">flat_vector_allocation_domain</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">,</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">retmask</span><span class="f">,</span>
<a name="624" /><span class="True">     624:</span>                   <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">)</span>
<a name="625" /><span class="True">     625:</span> <span class="f">{</span>
<a name="626" /><span class="True">     626:</span>     <span class="k">/* Careful. Some cpus do not strictly honor the set of cpus</span>
<a name="627" /><span class="True">     627:</span> <span class="k">     * specified in the interrupt destination when using lowest</span>
<a name="628" /><span class="True">     628:</span> <span class="k">     * priority interrupt delivery mode.</span>
<a name="629" /><span class="True">     629:</span> <span class="k">     *</span>
<a name="630" /><span class="True">     630:</span> <span class="k">     * In particular there was a hyperthreading cpu observed to</span>
<a name="631" /><span class="True">     631:</span> <span class="k">     * deliver interrupts to the wrong hyperthread when only one</span>
<a name="632" /><span class="True">     632:</span> <span class="k">     * hyperthread was specified in the interrupt desitination.</span>
<a name="633" /><span class="True">     633:</span> <span class="k">     */</span>
<a name="634" /><span class="True">     634:</span>     <span class="b">cpumask_clear</span><span class="f">(</span><span class="b">retmask</span><span class="f">)</span><span class="f">;</span>
<a name="635" /><span class="True">     635:</span>     <a href="cpu.c_macros_ref.html#_Y3B1bWFza19iaXRzXzA_"><span class="b">cpumask_bits</span></a><span class="f">(</span><span class="b">retmask</span><span class="f">)</span><span class="f">[</span><span class="c">0</span><span class="f">]</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_QVBJQ19BTExfQ1BVU18w"><span class="b">APIC_ALL_CPUS</span></a><span class="f">;</span>
<a name="636" /><span class="True">     636:</span> <span class="f">}</span>
<a name="637" /><span class="True">     637:</span> 
<a name="638" /><span class="True">     638:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span>
<a name="639" /><span class="True">     639:</span> <span class="b">default_vector_allocation_domain</span><span class="f">(</span><span class="m">int</span> <span class="b">cpu</span><span class="f">,</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">retmask</span><span class="f">,</span>
<a name="640" /><span class="True">     640:</span>                  <span class="m">const</span> <span class="m">struct</span> <span class="b">cpumask</span> <span class="f">*</span><span class="b">mask</span><span class="f">)</span>
<a name="641" /><span class="True">     641:</span> <span class="f">{</span>
<a name="642" /><span class="True">     642:</span>     <span class="b">cpumask_copy</span><span class="f">(</span><span class="b">retmask</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_Y3B1bWFza19vZl8w"><span class="b">cpumask_of</span></a><span class="f">(</span><span class="b">cpu</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="643" /><span class="True">     643:</span> <span class="f">}</span>
<a name="644" /><span class="True">     644:</span> 
<a name="645" /><span class="True">     645:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">default_check_apicid_used</span><span class="f">(</span><span class="b">physid_mask_t</span> <span class="f">*</span><span class="b">map</span><span class="f">,</span> <span class="m">int</span> <span class="b">apicid</span><span class="f">)</span>
<a name="646" /><span class="True">     646:</span> <span class="f">{</span>
<a name="647" /><span class="True">     647:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cGh5c2lkX2lzc2V0XzA_"><span class="b">physid_isset</span></a><span class="f">(</span><span class="b">apicid</span><span class="f">,</span> <span class="f">*</span><span class="b">map</span><span class="f">)</span><span class="f">;</span>
<a name="648" /><span class="True">     648:</span> <span class="f">}</span>
<a name="649" /><span class="True">     649:</span> 
<a name="650" /><span class="True">     650:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">default_check_apicid_present</span><span class="f">(</span><span class="m">int</span> <span class="b">bit</span><span class="f">)</span>
<a name="651" /><span class="True">     651:</span> <span class="f">{</span>
<a name="652" /><span class="True">     652:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cGh5c2lkX2lzc2V0XzA_"><span class="b">physid_isset</span></a><span class="f">(</span><span class="b">bit</span><span class="f">,</span> <span class="b">phys_cpu_present_map</span><span class="f">)</span><span class="f">;</span>
<a name="653" /><span class="True">     653:</span> <span class="f">}</span>
<a name="654" /><span class="True">     654:</span> 
<a name="655" /><span class="True">     655:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">default_ioapic_phys_id_map</span><span class="f">(</span><span class="b">physid_mask_t</span> <span class="f">*</span><span class="b">phys_map</span><span class="f">,</span> <span class="b">physid_mask_t</span> <span class="f">*</span><span class="b">retmap</span><span class="f">)</span>
<a name="656" /><span class="True">     656:</span> <span class="f">{</span>
<a name="657" /><span class="True">     657:</span>     <span class="f">*</span><span class="b">retmap</span> <span class="f">=</span> <span class="f">*</span><span class="b">phys_map</span><span class="f">;</span>
<a name="658" /><span class="True">     658:</span> <span class="f">}</span>
<a name="659" /><span class="True">     659:</span> 
<a name="660" /><span class="True">     660:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">__default_cpu_present_to_apicid</span><span class="f">(</span><span class="m">int</span> <span class="b">mps_cpu</span><span class="f">)</span>
<a name="661" /><span class="True">     661:</span> <span class="f">{</span>
<a name="662" /><span class="True">     662:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">mps_cpu</span> <span class="f">&lt;</span> <span class="b">nr_cpu_ids</span> <span class="f">&amp;&amp;</span> <a href="cpu.c_macros_ref.html#_Y3B1X3ByZXNlbnRfMA__"><span class="b">cpu_present</span></a><span class="f">(</span><span class="b">mps_cpu</span><span class="f">)</span><span class="f">)</span>
<a name="663" /><span class="True">     663:</span>         <span class="m">return</span> <span class="f">(</span><span class="m">int</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_cGVyX2NwdV8w"><span class="b">per_cpu</span></a><span class="f">(</span><span class="b">x86_bios_cpu_apicid</span><span class="f">,</span> <span class="b">mps_cpu</span><span class="f">)</span><span class="f">;</span>
<a name="664" /><span class="True">     664:</span>     <span class="m">else</span>
<a name="665" /><span class="True">     665:</span>         <span class="m">return</span> <a href="cpu.c_macros_ref.html#_QkFEX0FQSUNJRF8w"><span class="b">BAD_APICID</span></a><span class="f">;</span>
<a name="666" /><span class="True">     666:</span> <span class="f">}</span>
<a name="667" /><span class="True">     667:</span> 
<a name="668" /><span class="True">     668:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span>
<a name="669" /><span class="True">     669:</span> <span class="b">__default_check_phys_apicid_present</span><span class="f">(</span><span class="m">int</span> <span class="b">phys_apicid</span><span class="f">)</span>
<a name="670" /><span class="True">     670:</span> <span class="f">{</span>
<a name="671" /><span class="True">     671:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cGh5c2lkX2lzc2V0XzA_"><span class="b">physid_isset</span></a><span class="f">(</span><span class="b">phys_apicid</span><span class="f">,</span> <span class="b">phys_cpu_present_map</span><span class="f">)</span><span class="f">;</span>
<a name="672" /><span class="True">     672:</span> <span class="f">}</span>
<a name="673" /><span class="True">     673:</span> 
<a name="674" /><span class="False">     674:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="675" /><span class="False">     675:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">default_cpu_present_to_apicid</span><span class="f">(</span><span class="m">int</span> <span class="b">mps_cpu</span><span class="f">)</span>
<a name="676" /><span class="False">     676:</span> <span class="f">{</span>
<a name="677" /><span class="False">     677:</span>     <span class="m">return</span> <span class="b">__default_cpu_present_to_apicid</span><span class="f">(</span><span class="b">mps_cpu</span><span class="f">)</span><span class="f">;</span>
<a name="678" /><span class="False">     678:</span> <span class="f">}</span>
<a name="679" /><span class="False">     679:</span> 
<a name="680" /><span class="False">     680:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span>
<a name="681" /><span class="False">     681:</span> <span class="b">default_check_phys_apicid_present</span><span class="f">(</span><span class="m">int</span> <span class="b">phys_apicid</span><span class="f">)</span>
<a name="682" /><span class="False">     682:</span> <span class="f">{</span>
<a name="683" /><span class="False">     683:</span>     <span class="m">return</span> <span class="b">__default_check_phys_apicid_present</span><span class="f">(</span><span class="b">phys_apicid</span><span class="f">)</span><span class="f">;</span>
<a name="684" /><span class="False">     684:</span> <span class="f">}</span>
<a name="685" /><span class="True">     685:</span> <span class="f">#</span><span class="n">else</span>
<a name="686" /><span class="True">     686:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">default_cpu_present_to_apicid</span><span class="f">(</span><span class="m">int</span> <span class="b">mps_cpu</span><span class="f">)</span><span class="f">;</span>
<a name="687" /><span class="True">     687:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">default_check_phys_apicid_present</span><span class="f">(</span><span class="m">int</span> <span class="b">phys_apicid</span><span class="f">)</span><span class="f">;</span>
<a name="688" /><span class="True">     688:</span> <span class="f">#</span><span class="n">endif</span>
<a name="689" /><span class="True">     689:</span> 
<a name="690" /><span class="True">     690:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_X86_LOCAL_APIC */</span>
<a name="691" /><span class="True">     691:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">irq_enter</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="692" /><span class="True">     692:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">irq_exit</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="693" /><span class="True">     693:</span> 
<a name="694" /><span class="True">     694:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">entering_irq</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="695" /><span class="True">     695:</span> <span class="f">{</span>
<a name="696" /><span class="True">     696:</span>     <span class="b">irq_enter</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="697" /><span class="True">     697:</span>     <span class="b">exit_idle</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="698" /><span class="True">     698:</span> <span class="f">}</span>
<a name="699" /><span class="True">     699:</span> 
<a name="700" /><span class="True">     700:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">entering_ack_irq</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="701" /><span class="True">     701:</span> <span class="f">{</span>
<a name="702" /><span class="True">     702:</span>     <span class="b">ack_APIC_irq</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="703" /><span class="True">     703:</span>     <span class="b">entering_irq</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="704" /><span class="True">     704:</span> <span class="f">}</span>
<a name="705" /><span class="True">     705:</span> 
<a name="706" /><span class="True">     706:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">exiting_irq</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="707" /><span class="True">     707:</span> <span class="f">{</span>
<a name="708" /><span class="True">     708:</span>     <span class="b">irq_exit</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="709" /><span class="True">     709:</span> <span class="f">}</span>
<a name="710" /><span class="True">     710:</span> 
<a name="711" /><span class="True">     711:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">exiting_ack_irq</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="712" /><span class="True">     712:</span> <span class="f">{</span>
<a name="713" /><span class="True">     713:</span>     <span class="b">irq_exit</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="714" /><span class="True">     714:</span>     <span class="k">/* Ack only at the end to avoid potential reentry */</span>
<a name="715" /><span class="True">     715:</span>     <span class="b">ack_APIC_irq</span><span class="f">(</span><span class="f">)</span><span class="f">;</span>
<a name="716" /><span class="True">     716:</span> <span class="f">}</span>
<a name="717" /><span class="True">     717:</span> 
<a name="718" /><span class="True">     718:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">ioapic_zap_locks</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="719" /><span class="True">     719:</span> 
<a name="720" /><span class="True">     720:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_APIC_H */</span>
<a name="721" /><span class="True">     721:</span> </pre>
  </body>
</html>
